import router from '@/router'
import store from './store'
import { permissionRoutes } from '@/api/user'

router.beforeEach(async(to, from, next) => {
  // 需求除了登录，404页面之外的所有页面都必有登录后才能访问
  // to.path跳转的目标路由路径
  // token判断是否已登录，token值存在，说明已登录，否则未登录
  // console.log(getToken())
  if (store.state.user.token) {
    if (to.path === '/login') {
      // 已登录，就跳转到首页
      next('/')
    } else {
      // 调用获取用户信息的函数
      // 当用户信息不存在的时候才调用接口（刷新浏览器的时候）
      // 通过用户id判断用户是否存在
      if (!store.state.user.userInfo.id) {
        await store.dispatch('user/getUserInfo')
        // 为了确保获取到menus数组,必须要写在获取用户信息之后

        const res = await permissionRoutes()
        console.log(23, res)

        const routes = await store.dispatch('permission/filtersRoutes', res.data.menus)
        router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
        // 把过滤出来的路由，重新添加进去，还有处理跳转的时候报404的错误，把路由页面的404删掉，重新添加到这里
        // 解决跳转出现空白页面问题，重新跳转到当前动态路由页面
        next(to.path)
      }
      next()
    }
  } else {
    // 未登录
    // 这个数组中的路由路径都是可以不登录直接访问的页面
    const whiteArr = ['/login', '/404', '/register']
    // 设置白名单，只要判断到跳转的目标路由路径存到白名单内的，
    // 则可以直接放行，判断的方法为indexOf
    if (whiteArr.indexOf(to.path) !== -1) { // 返回-1就是不存在，就会重新跳转回登录页
      next()
    } else {
      next('/login')
    }
  }
})

